"""
*** 利用画布，分图绘制柱状图 ***
"""

import matplotlib.pyplot as plt

# 假设这是你的数据点，横坐标使用月份名称
months = ["一月", "二月", "三月", "四月", "五月", "六月", "七月"]
y = [
    [509, 361, 622, 579, 514, 437, 463],  # 公安
    [96, 71, 124, 141, 128, 67, 122],  # 信访
    [56, 44, 46, 50, 50, 38, 62],  # 劳动仲裁
    [246, 186, 158, 116, 150, 149, 173],  # 劳动监察
    [348, 262, 450, 348, 479, 582, 436],  # 法院
]

labels = ["公安", "信访", "劳动仲裁", "劳动监察", "法院"]
colors = ["red", "blue", "green", "black", "purple"]

# 创建一个包含3行2列子图的画布
fig, axs = plt.subplots(3, 2)

for i in range(len(labels)):
    # plt.subplot(3, 2, i + 1)
    # plt.bar(months, y[i], label=labels[i], color=colors[i])
    row = i // 2  # 计算子图所在的行
    col = i % 2  # 计算子图所在的列
    axs[row, col].bar(months, y[i], label=labels[i], color=colors[i])
    axs[row, col].legend()
    # axs[row, col].set_xlabel("月份")
    axs[row, col].set_ylabel("数量")
    axs[row, col].set_ylim(0, max(y[i]) + 100)
    axs[row, col].grid(True)
    # 绘制折线
    axs[row, col].plot(months, y[i], color=colors[i])
    # axs[row, col].set_title(labels[i])

    # 在每个柱子上显示数值
    for j, v in enumerate(y[i]):
        # 在条形上方添加文本
        axs[row, col].text(j, v + 0.5, str(v), ha="center", va="bottom")

# axs[2, 1].clear()  # 清除最后一个子图，因为我们不需要它
# axs[2, 1].set_axis_off()
# # axs[2, 1].set_xticks([])
# # axs[2, 1].set_yticks([])
# # axs[2, 1].set_title("")

# axs[2, 1]  # 最后一个子图，画饼图

sum_y = [sum(x) for x in y]
paches, texts, autotexts = axs[2, 1].pie(
    sum_y,
    labels=labels,
    colors=colors,
    autopct="%1.1f%%",
    startangle=90,
    labeldistance=1.05,
)

# 可以进一步自定义文本和扇区
for text in texts:
    text.set_color("black")  # 将文本颜色设置为黑色
    text.set_fontsize(12)  # 设置文本大小

for text in autotexts:
    text.set_color("white")  # 将自动生成的文本颜色设置为白色
    text.set_fontsize(8)  # 设置文本大小

for patch in paches:
    patch.set_edgecolor("black")  # 将扇区边缘颜色设置为黑色

plt.axis("equal")  # 保持饼图的圆形plt.show()


# 设置中文用楷体
plt.rcParams["font.sans-serif"] = ["KaiTi"]

# 添加总标题
plt.suptitle("1-7月主要部门矛盾纠纷排查情况", fontsize=24)
# 显示图形
plt.show()
